合并/连接
pd.merge(left, right, how = 'inner', on = None, left_on = None, right_on = None, left_index = False, right_index = False, sort = True)
| 参数 |
说明 |
| left |
DataFrame对象 |
| right |
另一个 DataFrame对象 |
| how |
left/right/inner 其中一个 |
| on |
列连接 |
| left_on |
来自左侧 DataFrame 中的列作为键 |
| right_on |
来自右侧 DataFrame 中的列作为键 |
| left_index |
如果为 True,则使用左侧 DataFrame 中的索引作为其连接键 |
| right_index |
同 left_index 用法 相同 |
| sort |
按照字典顺序通过连接键对结果 DataFrame进行排序 |
1> 合并一个键上的两个 DataFrame
left = pd.DataFrame({'id':[1, 2, 3],
'name':['meng', 'zhi', 'wang'],
'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
'name':['li', 'zhang', 'ming'],
'number':['1021','1203','1064']})
print(f'左 DataFrame:\n{left}')
# 输出结果:
# 左 DataFrame:
# id name number
# 0 1 meng 1001
# 1 2 zhi 1003
# 2 3 wang 1004
print(f'右 DataFrame:\n{right}')
# 输出结果:
# 右 DataFrame:
# id name number
# 0 1 li 1021
# 1 2 zhang 1203
# 2 4 ming 1064
rs = pd.merge(left,right, on = 'id')
print(f'通过 id 合并 DataFrame:\n{rs}')
# 输出结果:
# 通过 id 合并 DataFrame:
# id name_x number_x name_y number_y
# 0 1 meng 1001 li 1021
# 1 2 zhi 1003 zhang 1203
2> 合并多个键上的 DataFrame
left = pd.DataFrame({'id':[1, 2, 3],
'name':['meng', 'zhi', 'wang'],
'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
'name':['li', 'zhang', 'ming'],
'number':['1001','1003','1064']})
print(f'左 DataFrame:\n{left}')
# 输出结果:
# 左 DataFrame:
# id name number
# 0 1 meng 1001
# 1 2 zhi 1003
# 2 3 wang 1004
print(f'右 DataFrame:\n{right}')
# 输出结果:
# 右 DataFrame:
# id name number
# 0 1 li 1001
# 1 2 zhang 1003
# 2 4 ming 1064
rs = pd.merge(left,right, on = ['id','number'])
print(f'通过 id,number 合并 DataFrame:\n{rs}')
# 输出结果:
# 通过 id,number 合并 DataFrame:
# id name_x number name_y
# 0 1 meng 1001 li
# 1 2 zhi 1003 zhang
3> 使用 how 参数
| 参数 |
说明 |
| left |
使用左侧对象的键 |
| right |
使用右侧对象的键 |
| outer |
使用键的联合 |
| inner |
使用键的交集 |
left = pd.DataFrame({'id':[1, 2, 3],
'name':['meng', 'zhi', 'wang'],
'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
'name':['li', 'zhang', 'ming'],
'number':['1001','1003','1064']})
print(f'左 DataFrame:\n{left}')
# 输出结果:
# 左 DataFrame:
# id name number
# 0 1 meng 1001
# 1 2 zhi 1003
# 2 3 wang 1004
print(f'右 DataFrame:\n{right}')
# 输出结果:
# 右 DataFrame:
# id name number
# 0 1 li 1001
# 1 2 zhang 1003
# 2 4 ming 1064
rs1 = pd.merge(left,right, on = 'number', how = 'left')
print(f'left join 结果:\n{rs1}')
# 输出结果:
# left join 结果:
# id_x name_x number id_y name_y
# 0 1 meng 1001 1.0 li
# 1 2 zhi 1003 2.0 zhang
# 2 3 wang 1004 NaN NaN
rs2 = pd.merge(left,right, on = 'number', how = 'right')
print(f'right join 结果:\n{rs2}')
# 输出结果:
# right join 结果:
# id_x name_x number id_y name_y
# 0 1.0 meng 1001 1 li
# 1 2.0 zhi 1003 2 zhang
# 2 NaN NaN 1064 4 ming